package com.atde._04_structural_design_patterns.flyweight;


import java.util.HashMap;

/**
 * @BelongsProject: hsp_java_design_mode
 * @BelongsPackage: com.atde._04_structural_design_patterns.flyweight
 * @Author: Del
 * @CreateTime: 2025-06-23  15:09
 * @Description: 享元模式中的工厂类，用于管理并提供共享的WebSite对象
 * 通过内部缓存机制（对象池）避免重复创建相同类型的网站对象，提供资源利用率
 * @Version: 1.0
 */
public class WebSiteFactory {

    // 池容器
    private HashMap<String, ConcreteWebSite> pool = new HashMap<>();

    // 根据网站的类型，返回相应的 网站，如果没有网站，就创建一个网站，并放入到池中，并返回
    /**
     * 获取指定类型的网站实例。若实例不存在，则新建并缓存至对象池中。
     *
     * @param type 网站类型（如新闻、博客等）
     * @return WebSite 指定类型的网站实例
     */
    public WebSite getWebSiteCategory(String type) {
        if (!pool.containsKey(type)) {
            pool.put(type, new ConcreteWebSite(type));
            System.out.println("创建网站：" + type);
        }
        return (WebSite) pool.getOrDefault(type, new ConcreteWebSite(type));
    }

    /**
     * 获取当前对象池中已缓存的不同网站类型的数量。
     *
     * @return int 当前网站类型的总数
     */
    public int getWebSiteCount() {
        return pool.size();
    }

}
